home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / percent / percent.pas < prev    next >
Pascal/Delphi Source File  |  1996-04-08  |  9KB  |  277 lines

  1. { ****************************************************************** }
  2. {                                                                    }
  3. {   Delphi component TPERCENT                                        }
  4. {                                                                    }
  5. {   A percent bar control                                            }
  6. {                                                                    }
  7. {   Code generated by Component Create for Delphi                    }
  8. {                                                                    }
  9. {   Generated from source file E:\DELPHI\COMPCREA\3DPCT.CD           }
  10. {   on 16 June 1995 at 13:04                                         }
  11. {                                                                    }
  12. {   Copyright 1995 Zane Rathwick                                     }
  13. {                                                                    }
  14. { ****************************************************************** }
  15.  
  16.  
  17. unit Percent;
  18.  
  19. interface
  20.  
  21. {$IFDEF WIN32}
  22. uses Messages, Windows, SysUtils, Classes, Controls, 
  23.      Forms, Menus, Graphics;
  24. {$ELSE}
  25. uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls, 
  26.      Forms, Menus, Graphics;
  27. {$ENDIF}
  28.  
  29.      { Unit-wide declarations }
  30.      { type }
  31.      { . . . }
  32.      { var }
  33.      { . . . }
  34.  
  35. type
  36.   TPERCENT = class(TGraphicControl)
  37.     private
  38.       { Private fields of TPERCENT }
  39.         { Storage for property PercentShaded }
  40.         FPercentShaded : Integer;
  41.         { Storage for property IsHorizontal }
  42.         FIsHorizontal : Boolean;
  43.         { Storage for property PercentColor }
  44.         FPercentColor : TColor;
  45.         { Storage for property Font }
  46.         FFont : TFont;
  47.         { Storage for property ShowPercent }
  48.         FShowPercent : Boolean;
  49.         { Storage for property Caption }
  50.         FCaption : String;
  51.  
  52.       { Private methods of TPERCENT }
  53.         { Method to set variable and property values and create objects }
  54.         procedure AutoInitialize;
  55.         { Method to free any objects created by AutoInitialize }
  56.         procedure AutoDestroy;
  57.         { Write method for property PercentShaded }
  58.         procedure SetPercentShaded(Value : Integer);
  59.         { Write method for property PercentColor }
  60.         procedure SetPercentColor(Value : TColor);
  61.         { Write method for property Font }
  62.         procedure SetFont(Value : TFont);
  63.         { Write method for property ShowPercent }
  64.         procedure SetShowPercent(Value : Boolean);
  65.         { Write method for property Caption }
  66.         procedure SetCaption(Value : String);
  67.  
  68.     protected
  69.       { Protected fields of TPERCENT }
  70.  
  71.       { Protected methods of TPERCENT }
  72.         procedure Paint; override;
  73.  
  74.     public
  75.       { Public fields of TPERCENT }
  76.  
  77.       { Public methods of TPERCENT }
  78.         constructor Create(AOwner: TComponent); override;
  79.         destructor Destroy; override;
  80.  
  81.     published
  82.       { Published properties of the component }
  83.         property OnClick;
  84.         property OnDblClick;
  85.         property OnMouseDown;
  86.         property OnMouseMove;
  87.         property OnMouseUp;
  88.         { Percentage of the progress bar shaded }
  89.         property PercentShaded : Integer
  90.              read FPercentShaded write SetPercentShaded
  91.              default 0;
  92.         { Orientation of the progress bar (read-only) }
  93.         property IsHorizontal : Boolean read FIsHorizontal;
  94.         property Width default 90;
  95.         property Height default 20;
  96.         { Color of percent bar }
  97.         property PercentColor : TColor
  98.              read FPercentColor write SetPercentColor
  99.              default clred;
  100.         property Font : TFont read FFont write SetFont;
  101.         { Toggles whether the percent is visible or not }
  102.         property ShowPercent : Boolean
  103.              read FShowPercent write SetShowPercent
  104.              default True;
  105.         { Text to appear in place of the percent }
  106.         property Caption : String read FCaption write SetCaption;
  107.  
  108.   end;
  109.  
  110. procedure Register;
  111.  
  112. implementation
  113.  
  114. procedure Register;
  115. begin
  116.      { Register TPERCENT with Samples as its
  117.        default page on the Delphi component palette }
  118.      RegisterComponents('Samples', [TPERCENT]);
  119.  
  120.      { Custom property editors, if any, can be registered here with
  121.        calls to RegisterPropertyEditor }
  122.  
  123. end;
  124.  
  125. { Method to set variable and property values and create objects }
  126. procedure TPERCENT.AutoInitialize;
  127. begin
  128.      FPercentShaded := 0;
  129.      Width := 90;
  130.      Height := 20;
  131.      FPercentColor := clred;
  132.      FFont := TFont.Create;
  133.      FShowPercent := True;
  134. end; { of AutoInitialize }
  135.  
  136. { Method to free any objects created by AutoInitialize }
  137. procedure TPERCENT.AutoDestroy;
  138. begin
  139.      FFont.Free;
  140. end; { of AutoDestroy }
  141.  
  142. { Write method for property PercentShaded }
  143. procedure TPERCENT.SetPercentShaded(Value : Integer);
  144. begin
  145.      FPercentShaded := Value;
  146.      if FPercentShaded < 0 then
  147.           FPercentShaded := 0
  148.      else
  149.           if FPercentShaded > 100 then
  150.                FPercentShaded := 100;
  151.      { Update the display of the component }
  152.      Paint
  153. end;
  154.  
  155. { Write method for property PercentColor }
  156. procedure TPERCENT.SetPercentColor(Value : TColor);
  157. begin
  158.      FPercentColor := Value;
  159.  
  160.      { If changing this property affects the appearance of
  161.        the component, call Paint here so the image will be
  162.        updated. }
  163.       Paint;
  164. end;
  165.  
  166. { Write method for property Font }
  167. procedure TPERCENT.SetFont(Value : TFont);
  168. begin
  169.      { Use Assign method because TFont is an object type }
  170.      FFont.Assign(Value);
  171.  
  172.      { If changing this property affects the appearance of
  173.        the component, call Paint here so the image will be
  174.        updated. }
  175.       Paint;
  176. end;
  177.  
  178. { Write method for property ShowPercent }
  179. procedure TPERCENT.SetShowPercent(Value : Boolean);
  180. begin
  181.      FShowPercent := Value;
  182.  
  183.      { If changing this property affects the appearance of
  184.        the component, call Paint here so the image will be
  185.        updated. }
  186.       Paint;
  187. end;
  188.  
  189. { Write method for property Caption }
  190. procedure TPERCENT.SetCaption(Value : String);
  191. begin
  192.      FCaption := Value;
  193.  
  194.      { If changing this property affects the appearance of
  195.        the component, call Paint here so the image will be
  196.        updated. }
  197.       Paint; 
  198. end;
  199.  
  200. constructor TPERCENT.Create(AOwner: TComponent);
  201. begin
  202.      { Call the Create method of the parent class }
  203.      inherited Create(AOwner);
  204.  
  205.      { Set the initial values of variables and properties using }
  206.      { AutoInitialize procedure, generated by Component Create  }
  207.      AutoInitialize;
  208.  
  209.      { Code to perform other tasks when the component is created }
  210.  
  211. end;
  212.  
  213. destructor TPERCENT.Destroy;
  214. begin
  215.      { AutoDestroy, which is generated by Component Create, frees any   }
  216.      { objects created by AutoInitialize.                               }
  217.      AutoDestroy;
  218.  
  219.      { Here, free any other dynamic objects that the component methods  }
  220.      { created but have not yet freed.  Also perform any other clean-up }
  221.      { operations needed before the component is destroyed.             }
  222.  
  223.      { Last, free the component by calling the Destroy method of the    }
  224.      { parent class.                                                    }
  225.      inherited Destroy;
  226. end;
  227.  
  228. procedure TPERCENT.Paint;
  229. var
  230. pctstr:string;
  231. begin
  232.      { Determine orientation; store it so it will
  233.        be available in the IsHorizontal property }
  234.      FIsHorizontal := (Width >= Height);
  235.  
  236.      { Draw the framing rectangle }
  237.      canvas.pen.color:=clgray;
  238.      canvas.moveto(0,height);
  239.      canvas.lineto(0,0);
  240.      canvas.lineto(width-1,0);
  241.      canvas.pen.color:=clwhite;
  242.      canvas.lineto(width-1,height-1);
  243.      canvas.lineto(0,height-1);
  244.      canvas.pen.color:=clblack;
  245.      Canvas.Brush.Color := clWhite;
  246.      Canvas.Pen.Width := 0;
  247.      Canvas.Rectangle(1, 1, Width-1, Height-1);
  248.  
  249.  
  250.      { Draw the progress bar within }
  251.      Canvas.Brush.Color := fpercentcolor;
  252.      Canvas.Pen.Width := 0;
  253.      canvas.pen.color:=fpercentcolor;
  254.      if FIsHorizontal then
  255.           Canvas.Rectangle(2, 2, 2+Round((Width-4) * (FPercentShaded/100)), Height-2)
  256.      else
  257.           Canvas.Rectangle(2, height-2, Width-2, 2+Round((Height-4) * ((100-FPercentShaded)/100)));
  258.      if showpercent=true then
  259.      begin
  260.           canvas.font:=font;
  261.           str(FPercentShaded,pctstr);
  262.           pctstr:=pctstr+'%';
  263.           canvas.brush.style:=bsclear;
  264.           canvas.textout((width-canvas.textwidth(pctstr))div 2,
  265.                (height-canvas.textheight(pctstr)) div 2,pctstr);
  266.      end else
  267.      begin
  268.           canvas.brush.style:=bsclear;
  269.           canvas.textout((width-canvas.textwidth(caption))div 2,
  270.                (height-canvas.textheight(caption)) div 2,caption);
  271.      end;
  272. end;
  273.  
  274.  
  275.  
  276. end.
  277.